﻿#pragma execution_character_set("utf-8")
#include "pricepage.h"
#include "ui_price.h"
#include "maincontainer.h"
#include "doubaoapi.h"
#include <QMessageBox>
#include <QDebug>

/**
 * @brief 构造函数
 * @param parent 父窗口指针
 */
PricePage::PricePage(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::PricePage),
    mainContainer(nullptr)
{
    ui->setupUi(this);
}

/**
 * @brief 析构函数
 */
PricePage::~PricePage()
{
    delete ui;
}

/**
 * @brief 设置主容器指针
 * @param container 主容器指针
 */
void PricePage::setMainContainer(MainContainer *container)
{
    this->mainContainer = container;
}

/**
 * @brief 返回主页按钮点击槽函数
 */
void PricePage::on_pushButton_back_clicked()
{
    if (mainContainer) {
        mainContainer->switchToPage(MainContainer::InitPageIndex);
    }
}

/**
 * @brief 查询价格按钮点击槽函数
 */
void PricePage::on_pushButton_query_clicked()
{
    QString item = ui->lineEdit_recycle_item->text().trimmed();
    if (item.isEmpty()) {
        QMessageBox::information(this, "提示", "请输入可回收物名称");
        return;
    }
    
    ui->label_price_info->setText("价格信息查询中...");
    
    // 通过豆包AI查询价格信息
    QString priceData = queryRecyclePriceByAI(item);
    if (!priceData.isEmpty()) {
        displayPriceData(priceData);
    } else {
        displayError("查询失败，请稍后重试");
    }
}

/**
 * @brief 通过豆包AI查询可回收物价格
 * @param item 可回收物名称
 * @return 查询结果
 */
QString PricePage::queryRecyclePriceByAI(const QString &item)
{
    try {
        // 创建豆包AI实例
        DoubaoAI doubaoAI;
        
        // 构建查询价格的提问
        QString prompt = buildPriceQueryPrompt(item);
        
        // 发送请求并获取响应
        QString response = doubaoAI.DoubaoAI_request(prompt);
        
        // 返回AI的响应结果
        return response;
    } catch (const std::exception &e) {
        qDebug() << "AI查询异常: " << e.what();
        displayError(QString("查询出错: %1").arg(e.what()));
    }
    
    return QString();
}

/**
 * @brief 构建查询可回收物价格的提问
 * @param item 可回收物名称
 * @return 构建好的提问字符串
 */
QString PricePage::buildPriceQueryPrompt(const QString &item)
{
    // 构建一个清晰的提问，指导AI返回简洁的关键价格信息，不要分条或分析
    QString prompt = QString(
        "请以简洁的方式提供'%1'这种可回收物的以下信息，不要分点，不要添加额外分析：\n"
        "1. 当前市场价格（必须注明单位，如元/公斤或元/个）\n"
        "2. 最近一个月的价格波动幅度（用百分比表示）\n"
        "3. 价格趋势（上涨、下跌、平稳）\n"
        "请用正常的段落文本格式返回，不要使用1、2、3等序号，不要包含'当前市场价格：'这样的前缀，直接呈现核心数据信息，例如：\n"
        "废纸箱当前市场价格约为1.2-1.5元/公斤，最近一个月价格波动幅度为-5%，价格趋势平稳。"
    ).arg(item);
    
    return prompt;
}

/**
 * @brief 显示价格数据
 * @param priceData 价格数据字符串
 */
void PricePage::displayPriceData(const QString &priceData)
{
    // 设置更大更明显的字体样式
    QString style = "font-size: 22px;";
    style += "font-weight: bold;";
    style += "color: #2E7D32;";
    style += "background-color: #F9FFF9;";
    style += "border: 2px solid #4CAF50;";
    style += "border-radius: 15px;";
    style += "padding: 30px;";
    style += "line-height: 1.8;";
    style += "text-align: center;";
    
    ui->label_price_info->setStyleSheet(style);
    ui->label_price_info->setText(priceData);
}

/**
 * @brief 显示错误信息
 * @param errorMsg 错误信息
 */
void PricePage::displayError(const QString &errorMsg)
{
    QMessageBox::warning(this, "查询错误", errorMsg);
    ui->label_price_info->setText("查询失败，请稍后重试");
}
